package payment;
import java.util.*; 
import java.math.*;
import payment.Money;

public class Change {
   private ArrayList<Money> moneyvalues; 	
	
   public Change(ArrayList<Money> moneys){
	  moneyvalues = moneys; 
//	  moneyvalues.add(100.0);
//	  moneyvalues.add(50.0);
//	  moneyvalues.add(20.0);
//	  moneyvalues.add(10.00);
//	  moneyvalues.add(5.00);
//	  moneyvalues.add(2.00);
//	  moneyvalues.add(1.00);
//	  moneyvalues.add(0.50);
//	  moneyvalues.add(0.20);
//	  moneyvalues.add(0.10);
//	  moneyvalues.add(0.05);
	  
   }
//   public setMoney
   public HashMap<String,Integer> changing(double change){
	   
	   System.out.println(Double.toString(change));
	   BigDecimal Change = new BigDecimal(Double.toString(change));
	   BigDecimal zero = new BigDecimal(Double.toString(0.00));
	   String money = "";
           HashMap<String,Integer> moneyMap = new HashMap<String, Integer>();
           BigDecimal min = new BigDecimal(moneyvalues.get(moneyvalues.size()-1).getValue());
	   while(Change.compareTo(zero)!=0){
		   for(Money value:moneyvalues){
			   BigDecimal Value = new BigDecimal(Double.toString(value.getValue()));
			   if ( Change.compareTo(Value) >= 0 ){
		                   
                                   if (moneyMap.containsKey(Value.toString())){
                                       moneyMap.put(Value.toString(), moneyMap.get(Value.toString()).intValue() + 1);    
                                   }
                                   else{
                                       moneyMap.put(Value.toString(),1);
                                   }
                                   
				   money += value.toString() + ", ";
				   Change = Change.subtract( Value );
                                   
				   break;
			   }
                           
                          
		   }
                   
                   
                   if (Change.compareTo(min) < 0 )
                              break;
		   
	   }
	   
	   return moneyMap;
   }
   
   public static void main(String []args){
	
	   Change tc = new Change((new MoneyFlyWeightFacgory()).getMoneyByCountry("AU"));
           HashMap<String,Integer> hm = tc.changing(58.5467);
	   
           for(String key:hm.keySet()){
               System.out.println(key + " " + hm.get(key));
           }
           
//	   System.out.println( "Change: " + tc.changing( 227.25) );

   }

}
